package com.itheima.health.utils;

import lombok.extern.slf4j.Slf4j;
import org.mindrot.jbcrypt.BCrypt;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;

@Slf4j
public class EncryptUtil {
    public final static String ENCODE_BCRYPT="bcrypt";
    public final static String ENCODE_MD5="md5";

    /**
     * 密码加密，使用不同的加密方式加密后的字段，前缀不一样
     * 前缀为 ”{type}”
     * @param type
     * @param password
     * @return
     */
    public static String encode(String type,String password) {
        String encode="{"+type+"}";
        if (type==ENCODE_BCRYPT) {
            encode += BCrypt.hashpw(password, BCrypt.gensalt());
        } else if (type==ENCODE_MD5) {
            encode +=DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8));
        }

        log.info("加密后的密码--{}，加密方式--{}",encode,type);
        return encode;
    }

    /**
     * 密码校验，成功返回true值
     * @param password
     * @param encodePasswd
     * @return
     */
    public static Boolean equality(String password,String encodePasswd) {
        //判断时BCrypt还是MD5
        if(encodePasswd.startsWith("{"+ENCODE_BCRYPT+"}")){
            String realEncode = encodePasswd.replace("{" + ENCODE_BCRYPT + "}", "");
            return BCrypt.checkpw(password,realEncode);
        }else if (encodePasswd.startsWith("{"+ENCODE_MD5+"}")){
            String realEncode = encodePasswd.replace("{" + ENCODE_MD5 + "}", "");
            return realEncode.equals(DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8)));
        }else {
            return password.equals(encodePasswd);
        }

    }
}
